#include<stdio.h>
typedef struct
{
 int l,r,d;
}Node;
Node node[60020];//一般开结点数的四倍
void build(int s,int e,int pos)
{
 int mid;
 node[pos].l=s;
 node[pos].r=e;
 node[pos].d=0;
 if(s==e) return;
 else
 {
  mid=(s+e)>>1;
  build(s,mid,pos*2);
  build(mid+1,e,pos*2+1);
 }//建树过程
}
void insert(int s,int e,int ld,int pos)
{
 int mid;
 if(s==node[pos].l&&e==node[pos].r)
 {
  node[pos].d+=ld;
  return;
 }
 mid=(node[pos].l+node[pos].r)>>1;
 if(mid<s) insert(s,e,ld,pos*2+1);
 else if(mid>=e) insert(s,e,ld,pos*2);
 else
 {
  insert(s,mid,ld,pos*2);
  insert(mid+1,e,ld,pos*2+1);
 }
}//插入线段
int query(int i,int ld,int pos)
{
 int mid;
 ld+=node[pos].d;//查询中的累加
 if(i==node[pos].l&&i==node[pos].r) return ld;
 mid=(node[pos].l+node[pos].r)>>1;
 if(i<=mid) return query(i,ld,2*pos);
 else return query(i,ld,2*pos+1);
}
int main()
{
 freopen("test.in","r",stdin);
 int t,l,s,e,ld,i,max,a,b;
 while(scanf("%d",&l)!=EOF)
 {
  build(0,l,1);
  max=-1;
  while(scanf("%d%d%d",&s,&e,&ld),s!=-1) insert(s,e,ld,1);
  for(i=0;i<=l;i++)
  {
   t=query(i,0,1);
   if(t>max)
   {
    max=t;
    a=i;
   }
  }
  for(i=l;i>=0;i--)
  {
   if(query(i,0,1)==max)
   {
    b=i;
    break;
   }
  }
  printf("%d %d\n",a,b);
 }
 return 0;
}
